package com.kkb.controller;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.kkb.common.utils.JsonUtils;
import com.kkb.common.utils.StringUtils;
import com.kkb.domain.AjaxResult;
import com.kkb.page.PageDomain;
import com.kkb.page.TableDataInfo;
import com.kkb.page.TableSupport;
import com.kkb.pojo.*;
import com.kkb.service.CategoryService;
import com.kkb.service.TbBrandService;
import com.kkb.service.TemplateService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.*;

import static com.kkb.domain.AjaxResult.error;

/**
 * 模型列表controller
 **/
@Controller
@RequestMapping("/templateController")
public class TemplateController {

    @Resource
    private TemplateService templateService;

    @Resource
    private TbBrandService tbBrandService;

    @Autowired
    private CategoryService categoryService;


    @RequestMapping("/template")
    public String showIndex() {
        return "template/template";
    }

    /**
     * 获取模型列表
     */

    @ResponseBody
    @RequestMapping("/getTemplatelist")
    public TableDataInfo getTemplatelist() {
        startPage();
        List<TbTemplate> tbTemplates = templateService.getTemplate();
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(0);
        rspData.setRows(tbTemplates);
        rspData.setTotal(new PageInfo(tbTemplates).getTotal());
        return rspData;
    }

    @ResponseBody
    @GetMapping("/getTemplateByCategoryId")
    public TbTemplate getTemplateByCategoryId(@RequestParam int categoryId) {
        return templateService.getTemplateByCategoryId(categoryId);
    }

    @ResponseBody
    @GetMapping("/getTemplateById")
    public TbTemplate getTemplateById(@RequestParam int templateId) {
        return templateService.selectTempById(templateId);
    }

    /**
     * 设置请求分页数据
     */
    private void startPage() {
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
            PageHelper.startPage(pageNum, pageSize);
        }
    }

    /**
     * 添加模型列表
     */
    @GetMapping("/add/{templateId}")
    public String  add(@PathVariable("templateId") Integer templateId, ModelMap mmap){
        mmap.put("template", templateService.selectTempById(templateId));

        TbTemplate tbTemplate = templateService.selectTempById(templateId);
        Integer categoryId = tbTemplate.getCategoryId();
        mmap.put("category", categoryService.selectCategoryById(categoryId));
        return "template/add";
    }

    /**
     * 添加模型列表
     */
    @PostMapping("/addSave")
    @ResponseBody
    public AjaxResult addSave(@Validated TbTemplate template) {

        Integer categoryId = template.getCategoryId();
        TbCategory tbCategory = categoryService.selectCategoryById(categoryId);
        //查询该分类名称是否存在
        boolean exist=templateService.queryNameIsExist(tbCategory.getCategoryName());
        if(exist){
            return AjaxResult.error("该分类名称已存在，请勿再次添加！");
        }
        template.setTemplateName(tbCategory.getCategoryName());
        template.setStatus(template.getStatus());
        template.setIsDelete("0");
        template.setCreateTime(new Date());
        return templateService.insertTemplate(template) > 0 ? AjaxResult.success() : error();
    }

    /**
     * 添加关联品牌信息
     */
    @PostMapping(value = "/addBrands")
    @ResponseBody
    public AjaxResult addBrands(TbTemplate template) {
        TbTemplate tbTemplate = templateService.selectTempById(template.getTemplateId());
        if (tbTemplate == null){
            return AjaxResult.error("添加品牌不到对应的模板信息");
        }
//        传入的对象的属性，转化为Json传入
        tbTemplate.setBrands(template.getBrands());
        boolean result=templateService.updateTempByPrimaryKey(tbTemplate);
        if(result){
            return AjaxResult.success();
        }
        return AjaxResult.error("添加品牌失败！");
    }


    @RequestMapping("/addBrand/{templateId}")
    public String addBrand(@PathVariable("templateId") Integer templateId,ModelMap mmap){
        //查询所有的品牌集合
        List<TbBrand> tbBrands = tbBrandService.queryBrands();
        String brandsJson = JsonUtils.objectToJson(tbBrands);
        JSONArray jsonArray = JSONObject.parseArray(brandsJson);
        //查询当前分类产品已有的品牌集合
        TbTemplate tbTemplate = templateService.selectTempById(templateId);
        String brands = tbTemplate.getBrands();
        JSONArray existBrands = JSONObject.parseArray(brands);
        //转化为json对象存入model
        mmap.addAttribute("brandsJson",jsonArray);
        mmap.addAttribute("existBrands",existBrands);
        mmap.addAttribute("templateId",templateId);
        return "template/addBrands";
    }


    @RequestMapping("/addAttribute/{templateId}")
    public String addAttribute(@PathVariable("templateId") Integer templateId,ModelMap mmap){
        //查询规格信息,查询出json串后组装成
        TbTemplate tbTemplate = templateService.selectTempById(templateId);
        String addAttribute = tbTemplate.getAttribute();
        JSONArray jsonArray = JSONObject.parseArray(addAttribute);
        System.out.println(jsonArray);
        mmap.addAttribute("jsonArray",jsonArray);
        mmap.addAttribute("templateId",templateId);
        return "template/addAttribute";
    }


    /**
     * 根据templateId更新对象的参数
     */
    @PostMapping("/updateAttribute")
    @ResponseBody
    public AjaxResult update(TbTemplate template){
        TbTemplate tbTemplate = templateService.selectTempById(template.getTemplateId());
        if (tbTemplate == null){
            return AjaxResult.error("添加属性时找不到对应的模板信息");
        }
//        传入的对象的属性，转化为Json传入
        tbTemplate.setAttribute(template.getAttribute());
        boolean result=templateService.updateTempByPrimaryKey(tbTemplate);
        if(result){
            return AjaxResult.success();
        }
        return AjaxResult.error("添加属性失败！");

    }

    /**
     * 根据templateId更新对象的参数
     */
    @PostMapping("/updateBrands")
    @ResponseBody
    public AjaxResult updateBrands(TbTemplate template){
        TbTemplate tbTemplate = templateService.selectTempById(template.getTemplateId());
        if (tbTemplate == null){
            return AjaxResult.error("添加品牌时找不到对应的模板信息");
        }
//        传入的对象的属性，转化为Json传入
        tbTemplate.setBrands(template.getBrands());
        boolean result=templateService.updateTempByPrimaryKey(tbTemplate);
        if(result){
            return AjaxResult.success();
        }
        return AjaxResult.error("添加品牌失败！");

    }

    /**
     * 根据id删除模板
     */
    @GetMapping("/removeTemplate/{templateId}")
    @ResponseBody
    public AjaxResult removeTemplate(@PathVariable("templateId") Integer templateId){
        AjaxResult ajaxResult=templateService.removeTemplateById(templateId);
        return ajaxResult;
    }
}
